<?php
/*
 * Quark PHP Framework
 * Copyright 2011, Sahib Alejandro Jaramillo Leo.
 * http://quarkphp.com/
 * Licensed under the GNU General Public License (http://www.gnu.org/licenses/gpl.html).
 */
/**
 * Definicion de clase Str
 * @filesource
 */
/**
 * Clase para realizar operaciones basicas con cadenas de texto
 * @author sahib
 */
class Str {

	/**
	 * Encoding que se utilizara en las funciones de manejo de cadenas
	 * por default utf-8
	 * @var string
	 */
	protected $encoding;

	/**
	 * Constructor
	 * @param string $encoding
	 * @return Str
	 */
	public function __construct( $encoding = 'utf-8' ) {

		$this->encoding = $encoding;
	}

	/**
	 * Corta una cadena a la longitud especificada por $length y agrega el posfijo $posfix si es necesario.
	 * Si el tamaño de la cadena no supera a $length no pasa nada.
	 * @param string $str cadena a cortar
	 * @param int $length nuevo tamaño de cadena
	 * @param string $posfix postfijo si la cadena es cortada
	 * @return string cadena cortada
	 */
	public function chop( $str, $length, $posfix = '...' ) {

		// Eliminar espacios multiples.
		$str = preg_replace( '/ {2,}/', ' ', trim( $str ) );
		// chopear cadena si es necesario.
		return (strlen( $str ) > $length ? trim( mb_substr( $str, 0, $length, $this->encoding ) ) . $posfix : $str);
	}

	/**
	 * Establece el encoding que se utilizaro en las funciones de manejo de cadenas.
	 * @param string $enc nuevo encoding
	 * @return string viejo encoding
	 */
	public function setEncoding( $enc ) {

		$enc_bak = $this->encoding;
		$this->encoding = $enc;
		return $enc_bak;
	}

	/**
	 * Normaliza una cadena de texto para ser utilizada en URL o nombres de archivo.
	 * @param string $str cadena a normalizar
	 * @return string cadena normalizada
	 */
	public function normalize( $str ) {

		$str = mb_strtolower( $str, 'utf-8' );
		$str = strtr( utf8_decode( $str ), utf8_decode( 'áàäâéèëêíìïîóòöôúùüûñ' ), 'aaaaeeeeiiiioooouuuun' );
		$str = str_replace( ' ', '-', $str );
		$str = str_replace( '&', '-y-', $str );
		$str = preg_replace( '/-{2,}/', '-', $str );
		return preg_replace( '/[^[:alnum:]-]/', '', $str );
	}
}